using System.Reflection;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.IO;
using System.Xml;
using System;
using Coordenadas;

namespace MapaMovil
{
    class Configuracion
    {
        XmlDocument doc;
        string configPath;
        string string_path;
        public Configuracion() {

            if (Environment.OSVersion.Platform == PlatformID.WinCE)
            {
                configPath = new DirectoryInfo(Assembly.GetExecutingAssembly().GetName().CodeBase).Parent.FullName;
            }
            else
                configPath = Directory.GetCurrentDirectory();

            //configPath = "\\Storage Card\\MapaMovil";
            string_path = configPath;
            /*configPath = Path.GetDirectoryName(
                System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);*/
            configPath += @"\config.xml";
            if (!File.Exists(configPath))
              throw new FileNotFoundException(
                     configPath + "No se encontro");
            doc = new XmlDocument();
            doc.Load(configPath);
        }
        public string path()
        {
            return string_path;
        }
        public double anchoKM() {
            String ancho = doc.DocumentElement.ChildNodes.Item(0).ChildNodes.Item(0).InnerText;
            return Utiles.myParseCoord(ancho);
        }
        public double altoKM() {
            String ancho = doc.DocumentElement.ChildNodes.Item(0).ChildNodes.Item(1).InnerText;
            return Utiles.myParseCoord(ancho);
        }
        public int nivelesZoom() {
            String niveles = doc.DocumentElement.ChildNodes.Item(1).InnerText;
            return Int32.Parse(niveles);        
        }


        public String url_servicio()
        {
            String url_servicio = doc.DocumentElement.ChildNodes.Item(8).InnerText;
            return url_servicio;
        }
        public String Idioma()
        {
            XmlNodeList elemList = doc.GetElementsByTagName("idioma");
            return string_path + elemList[0].InnerText;
        }

        //---obtener los niveles de ZoomMostrarPDI
        public int getZoomMostrarPDI()
        {
            String zoomPDI = doc.DocumentElement.ChildNodes.Item(14).InnerText;
            return Int32.Parse(zoomPDI);    
        }

        //---obtener el radio de accion para mostrar los PDI
        public double getRadioAccionPDI()
        {
            string radioAccionPDI = doc.DocumentElement.ChildNodes.Item(16).InnerText;
            return double.Parse(radioAccionPDI);
        }

        //---Obtener la carpeta de fotos
        public string getFotoDir() 
        {
            return doc.DocumentElement.ChildNodes.Item(17).InnerText;
        }

        public String archivo_emergencias()
        {
            String archivo_emergencias= doc.DocumentElement.ChildNodes.Item(9).InnerText;
            return archivo_emergencias;
        } 

        public LatLong getCoordsNE() {
            LatLong latlongNE = new LatLong();
            String lat_NE = doc.DocumentElement.ChildNodes.Item(2).ChildNodes.Item(0).ChildNodes.Item(0).InnerText;
            String long_NE = doc.DocumentElement.ChildNodes.Item(2).ChildNodes.Item(0).ChildNodes.Item(1).InnerText;
            latlongNE.Latitud = Utiles.myParseCoord(lat_NE);
            latlongNE.Longitud = Utiles.myParseCoord(long_NE);
            return latlongNE;
        }

        /* begin g3*/

        public int rx()
        {  // fes la resolucion eje x
            String rex = doc.DocumentElement.ChildNodes.Item(5).ChildNodes.Item(0).InnerText;
            return Int32.Parse(rex);
        }

        public int ry()
        {  // fes la resolucion eje y
            String rey = doc.DocumentElement.ChildNodes.Item(5).ChildNodes.Item(1).InnerText;
            return Int32.Parse(rey);
        }

        public String gpsCOM()
        {
            return doc.SelectSingleNode("//GPS/com").InnerText;
        }
        public int baudRate() {
           return int.Parse(doc.SelectSingleNode("//GPS/baudrate").InnerText);
        }

        public int DeltaSentido()
        {
            return int.Parse(doc.SelectSingleNode("//Destino/delta_sentido").InnerText);
        }
        public string getPathADI()
        {
            try
            {
                return doc.DocumentElement.ChildNodes.Item(8).InnerText;
            }
            catch (NullReferenceException)
            {
                return ".";
            }
        }

           /*end g3*/


        public LatLong getCoordsSW()
        {
            LatLong latlongSW = new LatLong();
            String lat_SW = doc.DocumentElement.ChildNodes.Item(2).ChildNodes.Item(1).ChildNodes.Item(0).InnerText;
            String long_SW = doc.DocumentElement.ChildNodes.Item(2).ChildNodes.Item(1).ChildNodes.Item(1).InnerText;
            latlongSW.Latitud = Utiles.myParseCoord(lat_SW);
            latlongSW.Longitud = Utiles.myParseCoord(long_SW);
            return latlongSW;
        }

        public string getPathTiles() {
            return string_path + @"\" + doc.DocumentElement.ChildNodes.Item(3).InnerText;      
        }

        public string getPathRecursos()
        {
            return string_path + doc.DocumentElement.ChildNodes.Item(3).InnerText;
        }

        public string getPathMicroServWeb()
        {
            return string_path + doc.DocumentElement.ChildNodes.Item(4).InnerText;
        }
        public string carro()
        {
            XmlNodeList elemList=doc.GetElementsByTagName("carro");
            return elemList[0].InnerText;
        }
        public string[] getNombresGruposPDI() {
            XmlNodeList listPathsPDI = doc.DocumentElement.ChildNodes.Item(4).ChildNodes;
            string[] res = new string[listPathsPDI.Count];
            int count = 0;
            foreach (XmlNode nodo in listPathsPDI)
            {
                res[count++] = nodo.ChildNodes.Item(0).InnerText;
            }
            return res;
        }            
    }
}
